package com.hyt.it.ogt.kq.service.gov.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.service.gov.model.entity.TimeRoomParam;
import com.hyt.it.ogt.kq.service.gov.model.param.RoomTypeUpdateParam;
import com.hyt.it.ogt.kq.service.gov.model.vo.examiner.TimeRoomParamVO;

/**
 * <p>
 * 考生编排信息表 服务类
 * </p>
 *
 * @author huangyh
 * @since 2021-04-08
 */
public interface ITimeRoomParamService extends IService<TimeRoomParam> {

    /**
     * 初始化编排参数，如果office级别的参数没有，则默认自动初始化office模板参数
     * @param taskId
     * @param officeId
     */
    void initTaskTimeRoomParam(String taskId,String officeId);

    /**
     * 初始化机构编排参数
     * @param taskId
     * @param officeId
     */
    void initTaskTimeRoomParamFromOffice(String taskId, String officeId);

    /**
     * 更新编排参数
     * @param timeRoomParamList
     */
    void updateTaskTimeRoomParam(List<TimeRoomParamVO> timeRoomParamList);

    /**
     * 根据code更新参数值
     * @param taskId
     * @param code
     * @param value
     */
    void updateTaskTimeRoomParam(String taskId, String code, String value);

    /**
     * 更新考场类型值
     */
    void updateTaskTimeRoomParamRoomType(RoomTypeUpdateParam roomTypeUpdateParam);

    /**
     * 获取编排参数
     * @param taskId
     * @return
     */
    List<TimeRoomParamVO> getTaskTimeRoomParam(String taskId);

    /**
     * 获取编排参数的值
     * @param taskId
     * @param code
     * @return
     */
    String getTaskTimeRoomParamValueByCode(String taskId, String code);

    /**
     * 复制编排参数
     * @param oldTaskId 被复制的任务id
     * @param newTaskId 新的任务id
     * @param userName 用户名
     */
    void copyTimeRoomParam(String oldTaskId, String newTaskId, String userName);

    /**
     * 获取编排参数
     * @param timeRoomParamList
     * @param taskId
     * @return
     */
    Map<String,String> getTimeRoomParamMap(List<TimeRoomParamVO> timeRoomParamList, String taskId);

    /**
     * 编排参数：验证参数前后是否一致
     * @param taskId
     * @param newParamCode
     * @param newParamValue
     * @return
     */
    Boolean AreConsistent(String taskId, String newParamCode, String newParamValue);

    /**
     * 编排参数，验证考场类型前后是否一致。
     * @param taskId
     * @param newParamValue
     * @return
     */
    Boolean AreConsistentRoomType(String taskId, String newParamValue);

    /**
     * 当前是否虚拟考场
     * @param taskId
     * @param code
     * @return
     */
    Boolean AreVirtualRoom(String taskId);

    /**
     * 根据多个考试任务id、编排参数code，获取编排参数
     * @param taskIdList 多个考试任务id
     * @param code 编排参数code
     * @return 编排参数值
     */
    List<TimeRoomParam> listValueByTaskIdsAndCode(List<String> taskIdList, String code);

    /**
     * 根据考试任务id、编排参数code，获取编排参数
     * @param taskId 考试任务id
     * @param code 编排参数code
     * @return 编排参数值
     */
    TimeRoomParam oneValueByTaskIdAndCode(String taskId, String code);

}
